package com.edu.util;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;

import org.apache.commons.io.FilenameUtils;


import com.edu.exception.FileException;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;

/**
 * 扩充FilenameUtils类
 *
 * @author zhu
 */
public class ZFilenameUtils extends FilenameUtils {

    /**
     * 将文件路径转换为相对路径
     * 如果文件是以/开头，将/去掉
     *
     * @param path
     * @return
     */
    public static String convertToRelativePath(String path) {
        String normalizePath = FilenameUtils.normalize(path);
        //如果path以分隔符开头,将分隔符去除
        String relativePath = StringUtils.removeStart(normalizePath, File.separator);
        return relativePath;
    }

    public static String getSystemType() {
        Properties prop = System.getProperties();
        return prop.getProperty("os.name");
    }

    /**
     * 获取上一级目录
     * 1. dir如果是根目录则不做任何操作
     * 2. dir如果是二级目录则返回根目录
     *
     * @param dir 当前目录
     * @return String 父目录
     * 如:
     * 传入文件名为“ABC/123”的目录
     * 返回 ABC
     * *
     */
    public static String getParentDir(String dir) {
        dir = FilenameUtils.normalize(dir);
        System.out.println(dir);
        if (dir.contains("\\")) {
            String parent = dir.substring(0, dir.lastIndexOf("\\"));
            return parent;
        } else {
            return "";
        }
    }


    /**
     * 验证文件或者目录名合法性
     *
     * @param name
     * @return
     */
    public static boolean isValidDocName(String name) {
        String re = "^([^\\\\\\?\\/\\*\\|<>:\"]+/)*([^\\\\\\?\\/\\*\\|<>:\"])*\\.\\w+$";
        return name.matches(re);
    }

    public static boolean isValidDirName(String name) {
        String re = "^([^\\\\\\?\\/\\*\\|<>:\"]+/)*([^\\\\\\?\\/\\*\\|<>:\"])+$";
        return name.matches(re);
    }

    /**
     * 确定父目录是否包含子元素(文件或目录)。
     *
     *
     * @return
     * @throws IOException
     * @throws FileException
     */
    public static boolean isRepeatName(String dir) throws IOException {

        File file = new File(dir);
        File parentFile = file.getParentFile();
        String[] files = parentFile.list();
        if (ArrayUtils.isEmpty(files)) return false;
        List<String> fileList = Arrays.asList(files);
        return fileList.contains(file.getName());
    }


}
